#pragma once

#include <memory>
#include "Piece.h"

class Board;
struct Move;

class ZobristHasher_t
{
private:
	std::unique_ptr<ulong[]> s_typeVals;
	ulong _blackMove = 0;

public:
	ZobristHasher_t();

	void Initialize(Board &board) const;

	void DoMove(Board &board, const Move &move) const;
	void UndoMove(Board &board, const Move &move) const;

private:
	size_t GetPieceBaseIdx(PieceType type, PieceColor color) const;
};

extern const ZobristHasher_t ZobristHasher;



